package constant.milk.cashbook.database;

import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

public class DbCreateQuery
{
	private SQLiteDatabase db;
	
	public DbCreateQuery(SQLiteDatabase db)
	{
		this.db = db;
	}
	
	/**
	 * 현금 테이블 생성
	 * @return
	 */
	public boolean createRealMoneyTable()
	{
		// 0 = 포함, 1 = 미포함
		String sql = "CREATE TABLE " + TableName.REAL_MONEY + " (" +
						"id integer PRIMARY KEY autoincrement," +
						"count integer NOT NULL DEFAULT 0," + // 우선순위
						"addflag integer NOT NULL DEFAULT 0," + // 자산포함유무
						"money text NOT NULL DEFAULT '0'," + // 현금잔액
						"name text NOT NULL DEFAULT ''," + // 현금이름
						"memo text NOT NULL DEFAULT '');"; // 내용
		
		if (!isTable(db, TableName.REAL_MONEY))
		{
			db.execSQL(sql);
			
			return true;
		}
		else
		{
			return false;
		}
	}
	
	/**
	 * 통장 테이블생성
	 * @return
	 */
	public boolean createBankBookTable()
	{
		// addflag 0 = 포함, 1 = 미포함
		String sql = "CREATE TABLE " + TableName.BANK_BOOK + " (" +
						"id integer PRIMARY KEY autoincrement," +
						"count integer NOT NULL DEFAULT 0," + // 우선순위
						"addflag integer NOT NULL DEFAULT 0," + // 자산포함유무
						"money text NOT NULL DEFAULT '0'," + // 통장잔액
						"name text NOT NULL DEFAULT ''," + // 통장이름
						"memo text NOT NULL DEFAULT '');"; // 내용
		
		if (!isTable(db, TableName.BANK_BOOK))
		{
			db.execSQL(sql);
			
			return true;
		}
		else
		{
			return false;
		}
	}
	
	/**
	 * 체크카드 테이블생성
	 * @return
	 */
	public boolean createCheckCardTable()
	{
		// addflag 0 = 포함, 1 = 미포함
		String sql = "CREATE TABLE " + TableName.CHECK_CARD + " (" +
						"id integer PRIMARY KEY autoincrement," +
						"count integer NOT NULL DEFAULT 0," + // 우선순위
						"addflag integer NOT NULL DEFAULT 0," + // 자산포함유무
						"name text NOT NULL DEFAULT ''," + // 카드이름
						"linkid integer NOT NULL DEFAULT -1," + // 통장연결아이디
						"memo text NOT NULL DEFAULT '');"; // 내용
		
		if (!isTable(db, TableName.CHECK_CARD))
		{
			db.execSQL(sql);
			
			return true;
		}
		else
		{
			return false;
		}
	}
	
	/**
	 * 신용카드 테이블생성
	 * @return
	 */
	public boolean createCreditCardTable()
	{
		// addflag 0 = 포함, 1 = 미포함
		// autoyn 0 = 자동, 1 = 안자동
		String sql = "CREATE TABLE " + TableName.CREDIT_CARD + " (" +
						"id integer PRIMARY KEY autoincrement," +
						"count integer NOT NULL DEFAULT 0," + // 우선순위
						"addflag integer NOT NULL DEFAULT 0," + // 자산포함유무
						"money text NOT NULL DEFAULT '0'," + // 카드대금
						"name text NOT NULL DEFAULT ''," + // 카드이름
						"linkid integer NOT NULL DEFAULT -1," + // 통장연결아이디
						"autoyn integer NOT NULL DEFAULT 0," + // 카드대금결제 자동 유무
						"termdate integer NOT NULL DEFAULT 1," + // 사용기간
						"resultdate integer NOT NULL DEFAULT 3," + // 결제일
						"signdate integer NOT NULL DEFAULT 0," + // 마지막 결제 날짜
						"memo text NOT NULL DEFAULT '');"; // 내용
		
		if (!isTable(db, TableName.CREDIT_CARD))
		{
			db.execSQL(sql);
			
			return true;
		}
		else
		{
			return false;
		}
	}
	
	/**
	 * 핸드폰 테이블생성
	 * @return
	 */
	public boolean createPhoneTable()
	{
		// addflag 0 = 포함, 1 = 미포함
		// autoyn 0 = 자동, 1 = 안자동
		String sql = "CREATE TABLE " + TableName.PHONE + " (" +
						"id integer PRIMARY KEY autoincrement," +
						"count integer NOT NULL DEFAULT 0," + // 우선순위
						"addflag integer NOT NULL DEFAULT 0," + // 자산포함유무
						"money text NOT NULL DEFAULT '0'," + // 핸드폰대금
						"name text NOT NULL DEFAULT ''," + // 핸드폰이름
						"linkid integer NOT NULL DEFAULT -1," + // 통장연결아이디
						"autoyn integer NOT NULL DEFAULT 0," + // 핸드폰결제 자동 유무
						"termdate integer NOT NULL DEFAULT 1," + // 사용기간
						"resultdate integer NOT NULL DEFAULT 3," + // 결제일
						"signdate integer NOT NULL DEFAULT 0," + // 마지막 결제 날짜
						"memo text NOT NULL DEFAULT '');"; // 내용
		
		if (!isTable(db, TableName.PHONE))
		{
			db.execSQL(sql);
			
			return true;
		}
		else
		{
			return false;
		}
	}
	
	/**
	 * 상품권 테이블생성
	 * @return
	 */
	public boolean createGiftCardTable()
	{
		// addflag 0 = 포함, 1 = 미포함
		// resultflag 0 = 미사용, 1 = 사용
		String sql = "CREATE TABLE " + TableName.GIFT_CARD + " (" +
						"id integer PRIMARY KEY autoincrement," +
						"count integer NOT NULL DEFAULT 0," + // 우선순위
						"addflag integer NOT NULL DEFAULT 0," + // 자산포함유무
						"money text NOT NULL DEFAULT '0'," + // 상품권금액
						"name text NOT NULL DEFAULT ''," + // 상품권이름
						"giftnumber integer NOT NULL DEFAULT 0," + // 상품권 갯수
						"memo text NOT NULL DEFAULT '');"; // 내용
		
		if (!isTable(db, TableName.GIFT_CARD))
		{
			db.execSQL(sql);
			
			return true;
		}
		else
		{
			return false;
		}
	}
	
	/**
	 * 조회내용 테이블 생성
	 * @return
	 */
	public boolean createInOutTable()
	{
		// type 0 = 지출, 1 = 수입, 2 = 이동, 3 = 부채, 4 = 신용카드, 5 = 소액결제, 6 = 상품권사용, 7 = 상품권구입, 8 = 대금처리
		// kind 0 = 일반, 1 = 빌림,  2 = 빌려줌, 3 = 갚음, 4 = 받음, 5 = 완불, 6 = 추가금액, 7 = 거스름돈
		// asset 0 = 현금, 1 = 통장, 2 = 체크, 3 = 신용, 4 = 핸드폰, 5 = 상품권
		String sql = "CREATE TABLE " + TableName.IN_OUT + " (" +
						"id integer PRIMARY KEY autoincrement," +
						"type integer NOT NULL DEFAULT 0," + // 내역타입
						"kind integer NOT NULL DEFAULT 0," + // 내역종류
						"asset integer NOT NULL DEFAULT 0," + // 자산종류
						"subasset integer NOT NULL DEFAULT 0," + // 서브자산종류
						"maincategory text NOT NULL DEFAULT ''," + // 메인카테고리
						"subcategory text NOT NULL DEFAULT ''," + // 서브카테고리
						"date integer NOT NULL DEFAULT 0," + // 날짜
						"ampm integer NOT NULL DEFAULT 0," + // ampm 플레그
						"timehour integer NOT NULL DEFAULT 0," + // 시간
						"timeminute integer NOT NULL DEFAULT 0," + // 분
						"name text NOT NULL DEFAULT ''," + // 자산이름
						"subname text NOT NULL DEFAULT ''," + // 서브자산이름
						"money text NOT NULL DEFAULT '0'," + // 금액
						"submoney text NOT NULL DEFAULT '0'," + // 서브금액
						"point text NOT NULL DEFAULT '0'," + // 카드포인트
						"susumoney text NOT NULL DEFAULT '0'," + // 수수료
						"linkid integer NOT NULL DEFAULT -1," + // 연결 아이디
						"resultflag integer NOT NULL DEFAULT 0," + // 해결유무
						"person text NOT NULL DEFAULT ''," + // 부채사람
						"photopath text NOT NULL DEFAULT ''," + // 사진연결주소
						"memo text NOT NULL DEFAULT '');"; // 내용
		
		if (!isTable(db, TableName.IN_OUT))
		{
			db.execSQL(sql);
			
			return true;
		}
		else
		{
			return false;
		}
	}
	
	/**
	 * 메인카테고리 테이블 생성
	 * @return
	 */
	public boolean createCategoryMainTable()
	{
		String sql = "CREATE TABLE " + TableName.CATEGORY_MAIN + " (" +
						"id integer PRIMARY KEY autoincrement," +
						"name text NOT NULL DEFAULT ''," + // 카테고리이름
						"count integer NOT NULL DEFAULT 0);"; // 빈도수
		
		if (!isTable(db, TableName.CATEGORY_MAIN))
		{
			db.execSQL(sql);
			
			return true;
		}
		else
		{
			return false;
		}
	}
	
	/**
	 * 서브 카테고리 테이블 생성
	 * @return
	 */
	public boolean createCategorySubTable()
	{
		String sql = "CREATE TABLE " + TableName.CATEGORY_SUB + " (" +
						"id integer PRIMARY KEY autoincrement," +
						"name text NOT NULL DEFAULT ''," + // 카테고리이름
						"linkid integer NOT NULL DEFAULT -1," + // 상위카테고리 아이디
						"count integer NOT NULL DEFAULT 0);"; // 빈도수
		
		if (!isTable(db, TableName.CATEGORY_SUB))
		{
			db.execSQL(sql);
			
			return true;
		}
		else
		{
			return false;
		}
	}
	
	public boolean createAutoMainTable()
	{
		// type 0 = 지출, 1 = 수입, 2 = 이동, 3 = 부채, 4 = 신용카드, 5 = 소액결제, 6 = 상품권사용, 7 = 상품권구입, 8 = 대금처리
		// monthweekday 0 = 월간, 1 = 주간
		// kind 0 = 일반, 1 = 빌림,  2 = 빌려줌, 3 = 갚음, 4 = 받음, 5 = 완불, 6 = 추가금액, 7 = 거스름돈
		// asset 0 = 현금, 1 = 통장, 2 = 체크, 3 = 신용, 4 = 핸드폰, 5 = 상품권
		// autodate 0 = 일, 1 = 월, 2 = 화, 3 = 수, 4 = 목, 5 = 금, 6 = 토
		String sql = "CREATE TABLE " + TableName.AUTO_MAIN + " (" +
						"id integer PRIMARY KEY autoincrement," +
						"monthweekday integer NOT NULL DEFAULT 0," + // 주간 월간 플래그
						"type integer NOT NULL DEFAULT 0," + // 내역타입
						"kind integer NOT NULL DEFAULT 0," + // 내역종류
						"asset integer NOT NULL DEFAULT 0," + // 자산종류
						"subasset integer NOT NULL DEFAULT 0," + // 서브자산종류
						"maincategory text NOT NULL DEFAULT ''," + // 메인카테고리
						"subcategory text NOT NULL DEFAULT ''," + // 서브카테고리
						"autodate integer NOT NULL DEFAULT 0," + // 고정날짜
						"signdate integer NOT NULL DEFAULT 0," + // 적용날짜
						"ampm integer NOT NULL DEFAULT 0," + // ampm 플레그
						"timehour integer NOT NULL DEFAULT 0," + // 시간
						"timeminute integer NOT NULL DEFAULT 0," + // 분
						"name text NOT NULL DEFAULT ''," + // 자산이름
						"subname text NOT NULL DEFAULT ''," + // 서브자산이름
						"money text NOT NULL DEFAULT '0'," + // 금액
						"submoney text NOT NULL DEFAULT '0'," + // 서브금액
						"susumoney text NOT NULL DEFAULT '0'," + // 수수료
						"memo text NOT NULL DEFAULT '');"; // 내용

		if (!isTable(db, TableName.AUTO_MAIN))
		{
			db.execSQL(sql);
			
			return true;
		}
		else
		{
			return false;
		}
	}
	
	public boolean createSmsTable()
	{
		// type 0 = 지출, 1 = 수입, 2 = 현금출금, 3 = 현금입금
		// asset 2 = 통장, 3 = 체크, 4 = 신용
		String sql = "CREATE TABLE " + TableName.SMS + " (" +
						"id integer PRIMARY KEY autoincrement," +
						"type integer NOT NULL DEFAULT 0," +
						"name text NOT NULL DEFAULT ''," +
						"parser integer NOT NULL DEFAULT -1," +
						"address text NOT NULL DEFAULT ''," + 
						"memo text NOT NULL DEFAULT ''," +
						"subcardname text NOT NULL DEFAULT ''," +
						"subasset integer NOT NULL DEFAULT 0," +
						"cardname text NOT NULL DEFAULT ''," +
						"asset integer NOT NULL DEFAULT 0);";

		if (!isTable(db, TableName.SMS))
		{
			db.execSQL(sql);
			
			return true;
		}
		else
		{
			return false;
		}
	}
	
	public boolean createHalbuTable()
	{
		// type 0 = 지출, 1 = 수입, 2 = 이동, 3 = 부채, 4 = 신용카드, 5 = 소액결제, 6 = 상품권사용, 7 = 상품권구입, 8 = 대금처리
		// kind 0 = 일반, 1 = 빌림,  2 = 빌려줌, 3 = 갚음, 4 = 받음, 5 = 완불, 6 = 추가금액, 7 = 거스름돈
		// asset 0 = 현금, 1 = 통장, 2 = 체크, 3 = 신용, 4 = 핸드폰, 5 = 상품권
		String sql = "CREATE TABLE " + TableName.HALBU + " (" +
						"id integer PRIMARY KEY autoincrement," +
						"halbucount integer NOT NULL DEFAULT 0," + // 개월수
						"resultcount integer NOT NULL DEFAULT 0," + // 입력된 개월수
						"type integer NOT NULL DEFAULT 0," + // 내역타입
						"kind integer NOT NULL DEFAULT 0," + // 내역종류
						"asset integer NOT NULL DEFAULT 0," + // 자산종류
						"subasset integer NOT NULL DEFAULT 0," + // 서브자산종류
						"maincategory text NOT NULL DEFAULT ''," + // 메인카테고리
						"subcategory text NOT NULL DEFAULT ''," + // 서브카테고리
						"autodate integer NOT NULL DEFAULT 0," + // 고정날짜
						"signdate integer NOT NULL DEFAULT 0," + // 적용날짜
						"ampm integer NOT NULL DEFAULT 0," + // ampm 플레그
						"timehour integer NOT NULL DEFAULT 0," + // 시간
						"timeminute integer NOT NULL DEFAULT 0," + // 분
						"name text NOT NULL DEFAULT ''," + // 자산이름
						"subname text NOT NULL DEFAULT ''," + // 서브자산이름
						"money text NOT NULL DEFAULT '0'," + // 금액
						"submoney text NOT NULL DEFAULT '0'," + // 서브금액
						"susumoney text NOT NULL DEFAULT '0'," + // 수수료
						"memo text NOT NULL DEFAULT '');"; // 내용

		if (!isTable(db, TableName.HALBU))
		{
			db.execSQL(sql);
			
			return true;
		}
		else
		{
			return false;
		}
	}
	
	public boolean createBudgetTable()
	{
		// type 0 = 지출, 1 = 수입, 2 = 이동 
		// kind 0 = 주간, 1 = 월간, 2 = 연간
		String sql = "CREATE TABLE " + TableName.BUDGET + " (" +
						"id integer PRIMARY KEY autoincrement," +
						"type integer NOT NULL DEFAULT 0," + // 예산타입
						"kind integer NOT NULL DEFAULT 0," + // 예산종류
						"money text NOT NULL DEFAULT '0');"; // 예산금액

		if (!isTable(db, TableName.BUDGET))
		{
			db.execSQL(sql);
			
			return true;
		}
		else
		{
			return false;
		}
	}
	
	public boolean createMainSettingTable()
	{
		// type 0 = 지출, 1 = 수입, 2 = 이동, 3 = 부채, 4 = 잔액 
		// asset 0 = 현금, 1 = 통장, 2 = 체크, 3 = 신용, 4 = 핸드폰, 5 = 상품권, 6 = 전체
		// kind 0 = 일반, 1 = 빌림,  2 = 빌려줌, 3 = 갚음, 4 = 받음, 5 = 완불, 6 = 추가금액, 7 = 거스름돈
		String sql = "CREATE TABLE " + TableName.MAIN_SETTING + " (" +
						"id integer PRIMARY KEY autoincrement," +
						"type integer NOT NULL DEFAULT 0," + // 입력타입
						"asset integer NOT NULL DEFAULT 0," + // 자산종류
						"kind integer NOT NULL DEFAULT 0," + // 내역종류
						"name text NOT NULL DEFAULT '0');"; // 자산이름

		if (!isTable(db, TableName.MAIN_SETTING))
		{
			db.execSQL(sql);
			
			return true;
		}
		else
		{
			return false;
		}
	}
	
	public boolean createWidgetSettingTable()
	{
		// type 0 = 지출, 1 = 수입, 2 = 이동, 3 = 부채, 4 = 잔액 
		// asset 0 = 현금, 1 = 통장, 2 = 체크, 3 = 신용, 4 = 핸드폰, 5 = 상품권, 6 = 전체
		// kind 0 = 일반, 1 = 빌림, 2 = 빌려줌, 3 = 갚음, 4 = 받음, 5 = 완불, 6 = 추가금액, 7 = 거스름돈
		String sql = "CREATE TABLE " + TableName.WIDGET_SETTING + " (" +
						"id integer PRIMARY KEY autoincrement," +
						"type integer NOT NULL DEFAULT 0," + // 입력타입
						"asset integer NOT NULL DEFAULT 0," + // 자산종류
						"kind integer NOT NULL DEFAULT 0," + // 내역종류
						"name text NOT NULL DEFAULT '0');"; // 자산이름

		if (!isTable(db, TableName.WIDGET_SETTING))
		{
			db.execSQL(sql);
			
			return true;
		}
		else
		{
			return false;
		}
	}
	
	public boolean createAptDataTable()
	{
		String sql = "CREATE TABLE " + TableName.APT_DATA + " (" +
						"id integer PRIMARY KEY autoincrement," +
						"title text NOT NULL DEFAULT ''," + // 시도
						"name text NOT NULL DEFAULT ''," + // 이름
						"meib text NOT NULL DEFAULT ''," + // 매입
						"junse text NOT NULL DEFAULT '');"; // 전세

		if (!isTable(db, TableName.APT_DATA))
		{
			db.execSQL(sql);
			
			return true;
		}
		else
		{
			return false;
		}
	}
	
	/**
	 * flag 0 = 매입, 1 = 전세
	 * @return
	 */
	public boolean createMyHouseTable()
	{
		String sql = "CREATE TABLE " + TableName.MY_HOUSE + " (" +
						"id integer PRIMARY KEY autoincrement," +
						"title text NOT NULL DEFAULT ''," + // 시도
						"name text NOT NULL DEFAULT ''," + // 이름
						"pung text NOT NULL DEFAULT ''," + // 평수
						"date integer NOT NULL DEFAULT 0," + // 설정 날짜
						"flag integer NOT NULL DEFAULT 0);"; // 집 금

		if (!isTable(db, TableName.MY_HOUSE))
		{
			db.execSQL(sql);
			
			return true;
		}
		else
		{
			return false;
		}
	}
	
	/**
	 * 테이블이 있는지 없는지 확인한다.
	 * @param db
	 * @param tableName
	 * @return
	 */
	private boolean isTable(SQLiteDatabase db, String tableName)
	{
		String query = "SELECT tbl_name FROM sqlite_master WHERE tbl_name = '" + tableName + "'";
		Cursor c;
		try
		{
			c = db.rawQuery(query, null);
		} catch (Exception e)
		{
			return false;
		}
		
		if (c.getCount() > 0)
		{
			return true;
		}
		else
		{
			return false;
		}
	}
}
